﻿//#include<stdio.h>
//int main()
//{
//	printf("ab\b");
//	//ab
//	return 0;
//}
// 


//语句
//C语言的代码是由语句一条一条构成的
//空语句    这里需要一条语句，但是这个语句不需要干任何事
//表达式语句  s = a + b; 表达式后加一个;
//函数调用语句 printf("   ");  自己创建的函数也算
//复合语句  成对括号中的代码就构成一个代码块，就是复合语句
//控制语句  用于控制程序的执行流程，以实现程序的各种结构
//
//C语言是一种结构化的程序设计语言
//C语言支持三种结构
//顺序结构
//选择结构 if switch
//循环结构  while for   do while
//
//C语言有九种控制语句
//1.条件判断语句也叫分支语句：if语句  switch语句
//2.循环执行语句：do while语句  while语句 for语句
//3.转向语句; break语句 goto语句 continue语句 return语句
//
//注释
///**/不支持嵌套
//
//switch语句中的关键字有 case default break
//
//C语言的数据类型和变量
//1.数据类型介绍
//
//内置类型（C语言本身都有）
//字符型 char character
//[signed]char   有符号的
//unsigned char  没符号的
//
//浮点型(小数叫浮点)
//float 单精度浮点型
//double 双精度浮点型
//long double
//
//shirt短整型 short[int]  int可以省略
//int整形
//long 长整型  long[int]
//long long 长长整形 long long[int]
//
//布尔类型（表示真假的类型 - 布尔值）
//_Bool
//头文件 <stdbool.h>
//布尔类型的取值
//true 1 或false 0
//在布尔类型出现前，C语言规定0表示假 非0表示真
//
//自定义类型（自己创造的）
//数组
//结构体 struct
//枚举 enum
//联合体 union
//
//
//2.各种类型的长度
//sizeof 是一个关键词 专门用来计算sizeof的操作符数的类型长度的 单位是字节
//sizeof操作符的操作数可以是类型，也可以是变量或者表达式

//int main()
//{
//	printf("%zd\n", sizeof(char));	//1
//	printf("%zd\n", sizeof(short)); // 2
//	printf("%zd\n", sizeof(long)); //4
//	printf("%zd\n", sizeof(int)); // 4
//	printf("%zd\n", sizeof(double));  //8
//	printf("%zd\n", sizeof(float));  //4
//	printf("%zd\n", sizeof(long long));  //8
//	//C语言规定sizrof（long）>=sizeof(int)
//
//	//单位是byte
//	//1024 = 2^10
//	return 0;
//
//}


//int main()
//{
//	int a = 10;
//	printf("%zd\n", sizeof(a));
//	printf("%zd\n,", sizeof(int));
//	printf("%zd\n", sizeof a);
	//sizeof的操作数如果不是类型，而是表达式时()可以省去
	//sizeof后面的表达式是不是真实参与运算，根据表达式类型来得出大小
	//sizeof的计算结果是size_t类型的，size_tC语言只规定是无符号整数，并没有规定具体的类型。
	//为了利于程序的移植性，C语言创造了类型别名size_t
	//打印时用%zd
    //sizeof中如果放的是表达式，表达式不会真的计算
	/*return  0;


}*/


//signed和unsigned

//signed关键字，表示一个类型带有正负号，包括正负值
//unsinged关键字，表示该类型不带有正负号，只能表示零和正整数
//
//对于int类型默认是带正负号的，也就是说int 等于 signed int，由于这是默认情况，关键字signed
//一般省略不写，写了也不错
//
//char到底有符号还是无符号，这个不确定，但大部分编译器char=signed char
//对于有符号的整数打印应该用%d
//对于无符号的整数打印应该用%u


//数据类型的取值范围
//
//整数类型的取值范围在limits.中说明
//为了代码的可移植性，需要知道某种整数类型的极限值时，应该尽量使用这些常量。
//• SCHAR_MIN ， SCHAR_MAX ：signed char 的最小值和最大值。
//• SHRT_MIN ， SHRT_MAX ：short 的最小值和最大值。
//• INT_MIN ， INT_MAX ：int 的最小值和最大值。
//• LONG_MIN ， LONG_MAX ：long 的最小值和最大值。
//• LLONG_MIN ， LLONG_MAX ：long long 的最小值和最大值。
//• UCHAR_MAX ：unsigned char 的最大值。
//• USHRT_MAX ：unsigned short 的最大值。
//• UINT_MAX ：unsigned int 的最大值。
//• ULONG_MAX ：unsigned long 的最大值。
//• ULLONG_MAX ：unsigned long long 的最大值。
//浮点类型的取值范围在float.h中说明
//
//
//变量
//
//C语言将经常变化的值称为变量，不变的成为常量。
//int age//int为数据类型，age为变量名
//创建变量的同时给他一个值叫做初始化，已经有变量再给一个值叫做赋值

//#include <stdio.h>
//int age = 100;//全局变量

//int main()

//{
	//局部变量
	//int age = 0;//初始化
	//age = 20;//赋值  =为赋值操作符
	//float score = 3.14f;//后面加一个f由float类型变为double类型
	//printf("%d", age);
	
//当局部变量和全局变量重名的时候局部优先
   // return 0;
//}
//全局变量：在大括号外部定义的变量就是全局变量
//全局变量的使用范围更广，整个工程中想使用，都是有办法使用的。
// 局部变量：在大括号内部定义的变量就是局部变量
//局部变量的使用范围是比较局限，只能在自己所在的局部范围内使用的。



//全局变量和局部变量在内存中存储在哪里呢？
//一般我们在学习C / C++语言的时候，我们会关注
//内存中的三个区域：栈区、堆区、静态区。
//1. 局部变量是放在内存的栈区
//2. 全局变量是放在内存的静态区
//3. 堆区是用来动态内存管理的



//算术操作符 + - / * %
//也叫双目操作符
//操作符也叫运算符


#include <stdio.h>
//int main()
//{
//	printf("%d\n", 33 + 44);//33 44叫操作数 +叫操作符
//	int a = 44;
//	int b = 55;
//	int sum = 0;
//	a = a + 10; //复合赋值
//    a +=10//可以写成这样  +=是复合赋值符
//	printf("%d\n", sum = a + b);
//	printf("%d\n", 10 / 4);//得不到2.5
//	printf("%f\n", 10.0 / 4.0);//要想得到小数操作数也要有小数
//	printf("%d\n", 10 % 3);
//	printf("%d\n",-10 % 3);
//
//	return 0;
//}

//运算符 / 用来完成除法。
//除号的两端如果是整数，执行的是整数除法，得到的结果也是整数。

//运算符% 表示求模(余)运算，即返回两个整数相除的余值。这个运算符只能用于整数，不能用于浮点
//数。
//负数求模的规则是，结果的正负号由第一个运算数的正负号决定。


//单目操作符++ --
//int main()
//{
//	int a = 5;
//	int b = a++;
//	//前置++
//	//口诀：先++，后使用
//	//a = a+1，b = a
//	//后置++
//	//口诀：先使用，后++
//	printf("a=%d\n", a);
//
//	printf("b=%d\n", b);
//	return 0;
//
//}



//这里的 + 是正号， - 是负号，都是单目操作符。
//运算符 + 对正负值没有影响，是一个完全可以省略的运算符，但是写了也不会报错运算符
//- 用来改变一个值的正负号，负数的前面加上 - 就会得到正数，正数的前面加上 - 会得到负
//数。单目操作符


//强制类型转换
//在操作符中还有一种特殊的操作符是强制类型转换，语法形式很简单，形式如下：
// (类型)
//int main()
//{
//	int a =(int) 3.14;//int表示将3.14强制转换成整数3
//	printf("%d\n", a);
//	return 0;
//
//}
//俗话说，强扭的瓜不甜，我们使用强制类型转换都是万不得已的时候使用，如果不需要强制类型转化
//就能实现代码，这样自然更好的。
